<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	

	<script type="text/javascript">
		//直接量：/pattern/attributes;如：/\d+/g
		//正则表达式构成
		//1.边界符/正则表达式/
		//2.模式=普通字符+元字符
		//new创建：
		let reg1 = / /
		console.log(reg1);
		let reg2 = new RegExp()
		console.dir(reg2);
		//正则匹配常用函数
		//str.search(/ /) 查找字符串下标 -1
		//str.match(/ /) 查找字符串以及下标 null
		//str.replace(/ /) 新的字符串，旧的字符串
		// / /.test(str) true false
		// / /.exc(str) 查找字符串以及下标 null

		let str =  'This is new world, 2019-fine-5'
		let r1 = str.search(/is/);
		let r2 = str.match(/\d+/g);
		let r3 = str.replace(/fine/,5);
		console.log(r1,r2,r3);
        console.log(/new/.test(str));
        console.log(/NEW/.test(str));
        console.log(/new/.exec(str));
        console.log(/NEW/.exec(str));
        /*
			3.元字符
			\d	匹配一个数字 
			\w	匹配一个英文字母、数字或下划线
			\s	匹配一个空白字符
			
			4.特殊字符
			n*	匹配零个或者多个n的字符串
			n+	匹配任何至少包含一个n的字符串
			n?	匹配零个或者1个n的字符串 
			^n 	匹配以n开头的字符串
			n$ 	匹配以n结尾的字符串
			n{x}	匹配包含x个n的序列字符串
			n{x,y}	匹配至少x个，最多y个n的字符串
			n{x,}	匹配至少x个的字符串 
			?=n	匹配其后紧接指定的n字符串
			?!n	匹配其后没有紧接指定的n字符串
			\b  匹配一个单词边界，也就是单词与空格之间的位置，不匹配任何字符
			\B	匹配除单词边界以外的部分
			 | 	左右两边表达式之间 “或” 关系，匹配左边或者右边
			[]	匹配方括号中的任一字符
			[^]	匹配除方括号中的字符外的任何字符
			()	括号里面表示一个整体
			.	匹配除换行之外的任何一个字符

		 */
		 let strnew = 'aab aac aaa @_@ This is Ken speaking.By 2019-05-5d';
		 console.log(strnew.match(/\d/));//2
		 console.log(strnew.match(/\D/));//a
		 console.log(strnew.match(/\s/));//""
		 console.log(strnew.match(/\S/));//a
		 console.log(strnew.match(/is/));
		 console.log(strnew.match(/\bis/));
		 console.log(strnew.match(/k?/)); // 匹配0或者1
		console.log(strnew.match(/a{2}/))
		console.log(strnew.match(/\d{2,4}/g))
		console.log(strnew.match(/d$/))
		console.log(strnew.match(/^a/))
		console.log(strnew.match(/aa[b|c|a]/g))
		console.log(strnew.match(/[^0-9]/))
		console.log(strnew.match(/h(?=i|k)/))
		/*
			模式修正符
			i		在和模式进行匹配时不区分大小写
			g		全局匹配
			m		将字符串视为多行
		 */
		 var newstr = '<u>123</u><u>Abcadae</u><a href=""></a><u>123</u><u>Abcadae</u>';
		 console.log(newstr.match(/a/i))
		console.log(newstr.match(/a/ig))

		// 贪婪模式匹配
		console.log(newstr.match(/<u>.*<\/u>/));
		
		// 非贪婪模式匹配
		console.log(newstr.match(/<u>.*?<\/u>/g));


		//原型
        //函数对象
        let f1 = function(){}
        let f2 = new Function()
        function f3 (){}
        //普通对象
        let o1 = {}
        let o2 = new Object()
        let o3 = new f3()
        //函数类型
        //Number String Boolean Array
        console.log(typeof Object)
        console.log(typeof Function)
        //function
        console.log(typeof f1)
        console.log(typeof f2)
        console.log(typeof f3)




        var animal = function(){};
		var dog = function(){};

		animal.price = 2000;
		dog.prototype = animal;
		var tidy = new dog();
		console.log(dog.price);
		console.log(tidy.price);

        console.dir( f1)
		console.dir( f2)
		console.dir( f3)


		// object 
		console.log(typeof o1)
		console.log(typeof o2)
		console.log(typeof o3)

		console.dir( o1)
		console.dir( o2)
		console.dir( o3)

		// 原型对象
		
		// 函数对象 
		// 	prototype
		// 	__proto__
		 	
		// 普通对象
		// 	__proto__

		var person = function(name = 'ken') {
			this.name = name;
		}

		// 使用prototype来添加对象的属性和方法
		
		// person.prototype.getName = function() {
		// 	return this.name
		// }
		// person.prototype.getMoney = function() {
		// 	return this.money
		// }
		// person.prototype.money = '10000'

		person.prototype = {
			money:'10000',
			getName:function() {
				return this.name
			},
			getMoney:function() {
				return this.money
			}
		}

		var zjh = new person('zjh') // 实例化

		console.dir(zjh)
		console.log(zjh.name)
		console.log(zjh.money)
		console.log(zjh.getName())
		console.log(zjh.getMoney())
        




	</script>
</body>
</html>